#pragma once

#include <iostream>
#include <string>
#include <cerrno>
#include <cstring>
#include <cstdlib>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define FIFO_FILE "./myfilo" // 管道文件路径，管道文件名字为myfilo
#define MODE 0664            // 文件权限

enum // 枚举了三个错误值，然后从一开始递增
{
  FIFO_CREATE_ERR = 1,
  FIFO_DELETE_ERR,
  FIFO_OPEN_ERR
};

// 建立管道，初始化

class Init
{
public:
  Init()
  {
    // 创建管道文件
    int n = mkfifo(FIFO_FILE, MODE); // 成功返回0，失败返回-1
    if (n == -1)
    {
      perror("mkfifo");
      exit(FIFO_CREATE_ERR);
    }
  }
  ~Init()
  {
    int m = unlink(FIFO_FILE);
    if (m == -1)
    {
      // 删除管道文件
      perror("unlink");
      exit(FIFO_DELETE_ERR);
    }
  }
};